package com.zq.it.service.exam;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.zq.it.dao.common.PageConfig;
import com.zq.it.pojo.Student;
import com.zq.it.pojo.TClass;
import com.zq.it.pojo.Teacher;
import com.zq.it.pojo.exam.TClassTask;
import com.zq.it.pojo.exam.TStudentTask;
import com.zq.it.pojo.exam.TTask;
import com.zq.it.pojo.exam.TTaskmodel;
import com.zq.it.pojo.exam.data.ObjectData;
import com.zq.it.service.BaseService;

public interface TaskService extends BaseService {

	/**
	 * 增加任务模板
	 * 
	 * @param taskModel
	 */
	public void addTaskModel(TTaskmodel taskModel);

	/**
	 * 根据id删除任务模板
	 * 
	 * @param id
	 * @param path
	 *            绝对路径
	 */
	public String deleteTaskModel(Long[] id, String path, Teacher teacher);
	public List getStudentTaskList(Long id, Teacher teacher);
	/**
	 * 多条件查询任务模板
	 * 
	 * @param taskModel
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public String creatModelHql(TTaskmodel taskModel, String startTime,
			String endTime, Teacher teacher);

	/**
	 * 根据教师和模板id获取任务模板
	 * 
	 * @param teacher
	 *            教师信息
	 * @param id
	 *            任务模板id
	 * @return
	 */
	public TTaskmodel getTaskModel(Teacher teacher, Long id);

	/**
	 * 增加任务
	 * 
	 * @param task
	 *            任务
	 */
	public void addTask(TTask task);

	/**
	 * 根据id查询任务详情
	 * 
	 * @param id
	 * @return
	 */
	public TTask getTaskById(Teacher teacher, Long id);

	/**
	 * 获取该教师所有的任务模板
	 * 
	 * @param teacher
	 * @return
	 */
	public ObjectData getTaskModelByTeacher(Teacher teacher);

	/**
	 * 删除任务
	 * 
	 * @param teacher
	 *            任务创建人
	 * @param id
	 *            任务id
	 */
	public String deleteTask(Teacher teacher, Long[] id);

	/**
	 * 多条件查询任务信息
	 * 
	 * @param task
	 *            任务
	 * @param startTime
	 *            开始时间
	 * @param endTime
	 *            结束时间
	 * @return
	 */
	public String creatTaskHql(TTask task, String startTime, String endTime,
			Teacher teacher);

	/**
	 * 批量分配班级任务
	 * 
	 * @param id
	 *            批量班级id
	 * @param taskId
	 *            任务id
	 */
	public void addClassAssign(int[] id, long taskId, Teacher teacher);
	/**
	 * 获取已分配任务列表
	 * 
	 * @param config
	 *            分页配置
	 * @return 分页数据
	 */
	public ObjectData getStuTaskList(PageConfig config);

	/**
	 * 多条件查询已分配任务列表
	 * 
	 * @param stuTask
	 *            多个条件封装
	 * @return hql语句
	 */
	public String createHavaTaskHql(TStudentTask stuTask, Teacher teacher);

	/**
	 * 根据id获取已分配任务详情
	 * 
	 * @param id
	 *            已分配任务表的id
	 * @param teacher
	 *            该任务的教师
	 * @return
	 */
	public TStudentTask getStuTaskById(Long id, Teacher teacher);

	/**
	 * 批量删除已分配的任务
	 * 
	 * @param teacher
	 *            该任务的教师
	 * @param id
	 *            已分配任务的id
	 */
	public void deleteStuTask(Teacher teacher, Long[] id);

	/**
	 * 批量分配学生任务
	 * 
	 * @param ids
	 *            学生id
	 * @param id
	 *            任务id
	 * @param teacher
	 *            该任务的教师
	 */
	public void addStudentAssign(Long[] ids, long id, Teacher teacher);

	/**
	 * 分页显示已分配任务的班级
	 * 
	 * @param config
	 * @return
	 */
	public ObjectData getClassTaskListByPage(PageConfig config);

	/**
	 * 创建多条条件查询班级任务的hql语句
	 * 
	 * @param tclass
	 * @param task
	 * @param teacher
	 * @return
	 */
	public String createClassTaskHql(TClass tclass, TTask task,
			Teacher teacher);

	/**
	 * 批量删除已分配的班级任务
	 * 
	 * @param teacher
	 * @param id
	 */
	public void deleteClassTask(Teacher teacher, Long[] id);

	/**
	 * 创建多条件查询自己的任务的sql
	 * 
	 * @param stuTask
	 * @param student
	 * @return
	 */
	public String createMyTaskHql(TStudentTask stuTask, Student student);

	/**
	 * 通过已分配任务的id获取学生的任务信息
	 * 
	 * @param id
	 * @param student
	 * @return
	 */
	public TStudentTask getMyTask(Long id, Student student);

	/**
	 * 修改学生自己的任务信息
	 * 
	 * @param stuTask
	 * @param student
	 */
	public boolean updateMyTask(TStudentTask stuTask, Student student);

	/**
	 * 教师更新学生的任务信息
	 * 
	 * @param stuTask
	 */
	public void updateStuTask(TStudentTask stuTask);

	/**
	 * 根据班级任务ID获取TStudentTask集合
	 * 
	 * @param id
	 *            班级任务id
	 * @param teacher
	 *            任务所属教师
	 */

	/**
	 * 根据班级任务id获取班级任务信息
	 * 
	 * @param id
	 * @param teacher
	 * @return
	 */
	public TClassTask getClassTaskById(Long id, Teacher teacher);

	/**
	 * 修改学生成绩
	 * 
	 * @param classTask
	 * @param id
	 */
	public void updateStuScores(TClassTask classTask, Long[] id);

	/**
	 * 获得导出学生成绩的内容
	 * 
	 * @param classTask
	 * @return
	 */
	public HSSFWorkbook getStuScoresWorkbook(TClassTask classTask);
}
